package view;
/**
 *
 * @author Luis Gonzalez y Oscar Ardila
 * @version 0.1
 */
import controller.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;

public class App extends JApplet implements MouseListener,ActionListener{

    /**
     * Se definen los atributos de la clase.
     */
    private Container contenedor,arriba;
    private JList ninosSinRegalo,ninosConRegalo;
    private DefaultListModel nConRegalo, nSinRegalo;
    private JScrollPane scroll,scroll2;
    private JPanel listas,botones;
    private JToggleButton[] gift;
    private JLabel conRegalo,sinRegalo,saldo,titulo;
    private String[] ima={"basketball","bike","book","car","motorbike","pony","muñeca"};
    private ButtonGroup grupo;
    private Ninio ninios[];
    private String[] nombres={"Andres ","Felipe ","Oscar ","Nicolas ","Johann ","Jhonatan ","Javier ","Luis ","Rosa ","Andrea ","Laura ","Lina ","Diana ","Francy ","Gabriela "},
            apellidos={"Gonzalez","Ardila","Garcia","Guayacundo","Perez","Lopez","Torres","Moreno","Andrade","Romero","Bustos","Bermudez","Cardenas","Velez","Santos"},
            pedidos={"Libro","pelota","Carro","Bicicleta","Pony","Muñeca","Monopatín","Moto","Guitarra","Trompo","Yo-yo","Set Cocina","Juego te","Bolos","Pirinola"};
    private ArrayList<String> aNinios = new ArrayList<String>();
    private Regalo[] regalos = new Regalo[7];
    private PapaNoel usuario = new PapaNoel(500000);
    private retirarRegalo retirar = new retirarRegalo();
    private int precio[]={60000,350000,80000,25000,300000,90000,20000};
    /**
     * Metodo con el cual se inicializará el JApplet.
     */
    public void init(){
        /**
         * Se procede a inicializar los atributos de la clase.
         */
        contenedor = getContentPane();
        contenedor.setLayout(new BorderLayout(5,5));
        arriba = new Container();
        arriba.setLayout(new FlowLayout());
        listas = new JPanel();
        listas.setLayout(new GridBagLayout());
        GridBagConstraints limites = new GridBagConstraints();
        botones = new JPanel();
        botones.setLayout(new GridLayout(2,4,15,13));
        grupo = new ButtonGroup();
        saldo = new JLabel("Saldo Actual: $500000");
        conRegalo = new JLabel("Niños con regalo");
        sinRegalo = new JLabel("Niños sin regalo");
        titulo = new JLabel("Ayudando a Papá Noel");
        Font auxFont=titulo.getFont();
        titulo.setFont(new Font(auxFont.getFontName(), auxFont.getStyle(), 30));
        arriba.add(titulo);
        nSinRegalo = new DefaultListModel();
        nConRegalo = new DefaultListModel();
        gift = new JToggleButton[8];
        ninios = new Ninio[50];
        scroll = new JScrollPane(ninosConRegalo);
        /**
         * Se agregan los niños sin regalo a la lista.
         */
        for (int i=0; i<50 ; i++){
            ninios[i] = new Ninio(nombres[(int)(Math.random()*15)]+apellidos[(int)(Math.random()*15)],pedidos[(int)(Math.random()*15)]);
            aNinios.add(ninios[i].getNombre()+ninios[i].getRegaloPedido());
            nSinRegalo.addElement(ninios[i].getNombre()+" - "+ninios[i].getRegaloPedido());
        }
        ninosSinRegalo = new JList(nSinRegalo);
        ninosConRegalo = new JList(nConRegalo);
        scroll = new JScrollPane(ninosSinRegalo);
        scroll2 = new JScrollPane(ninosConRegalo);

        /**
         * Se inicializan los botones y se definen sus iconos, asi como sus MouseListener y ActionListener.
         */
        for (int i=0; i<7 ; i++){
                gift[i] = new JToggleButton(new ImageIcon("imagenes/"+ima[i]+2+".jpg"));
                gift[i].setPressedIcon(new ImageIcon("imagenes/"+ima[i]+2+".jpg"));
                gift[i].setSelectedIcon(new ImageIcon("imagenes/"+ima[i]+".gif"));
                gift[i].setActionCommand(ima[i]);
                gift[i].addMouseListener(this);
                gift[i].addActionListener(this);
                regalos[i] = new Regalo(ima[i],precio[i],i);
                grupo.add(gift[i]);
                botones.add(gift[i]);
        }
        gift[7] = new JToggleButton("<html>Retirar<br>Regalo</html>");
        gift[7].addActionListener(retirar);
        grupo.add(gift[7]);
        botones.add(gift[7]);


        limites.gridx = 0;
        limites.gridy = 0;
        limites.gridheight = 1;
        limites.gridwidth = 1;
        limites.anchor = GridBagConstraints.NORTH;
        listas.add(conRegalo,limites);
        limites.gridx = 1;
        limites.gridy = 0;
        limites.gridheight = 1;
        limites.gridwidth = 1;
        listas.add(sinRegalo,limites);
        limites.gridx = 0;
        limites.gridy = 1;
        limites.gridheight = 15;
        limites.gridwidth = 1;
        limites.weighty = 1;
        limites.anchor = GridBagConstraints.CENTER;
        listas.add(scroll2,limites);
        limites.gridx = 1;
        limites.gridy = 1;
        limites.gridheight = 15;
        limites.gridwidth = 1;
        listas.add(scroll,limites);

        contenedor.add(listas,BorderLayout.EAST);
        contenedor.add(botones,BorderLayout.CENTER);
        contenedor.add(saldo,BorderLayout.SOUTH);
        contenedor.add(arriba,BorderLayout.NORTH);
        setSize(780,290);
        setContentPane(contenedor);
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    /**
     * Método que se ejecutará cuando el mouse ingrese al botón.
     * @param e Evento generado cuando el mouse entra en el botón.
     */
    public void mouseEntered(MouseEvent e) {
        JToggleButton actual = (JToggleButton)(e.getSource());
        actual.setSelectedIcon(new ImageIcon("imagenes/"+actual.getActionCommand()+".gif"));
        actual.setIcon(new ImageIcon("imagenes/"+actual.getActionCommand()+".gif"));
    }

    /**
     * Método que se ejecutará cuando el mouse salga de el botón.
     * @param e Evento generado cuando el mouse entra en el botón.
     */
    public void mouseExited(MouseEvent e) {
        JToggleButton actual = (JToggleButton)(e.getSource());
        actual.setSelectedIcon(new ImageIcon("imagenes/"+actual.getActionCommand()+2+".jpg"));
        actual.setIcon(new ImageIcon("imagenes/"+actual.getActionCommand()+2+".jpg"));
    }

    /**
     * Método que se ejecutara cuando se haga un click en un boton de regalo.
     * @param e Evento generado cuando se de un click en un botón.
     */
    public void actionPerformed(ActionEvent e) {
         JToggleButton actual = (JToggleButton)(e.getSource());
         int i=0;
         int a=0;
         int b=ninosSinRegalo.getSelectedIndex();
          for(i=0;i<7;i++){
             if(actual.getActionCommand().equals(ima[i])){
                 break;
             }
          }
         if(b==-1 || usuario.getSaldo()<regalos[i].getPrecio()){
             JOptionPane.showMessageDialog(null, "No ha seleccionado ningun niño, o su saldo es insuficiente");
         }else{
             for(a=0;a<50;a++){
             if(ninios[a].getconRegalo()==false && (ninios[a].getNombre()+" - "+ninios[a].getRegaloPedido()).equals(nSinRegalo.getElementAt(b)))
                 break;
             }
             usuario.DarRegalo(ninios[a], regalos[i],usuario,ninosSinRegalo.getSelectedIndex(),nSinRegalo,nConRegalo);
             saldo.setText("Saldo Actual: $"+usuario.getSaldo());
         }
    }
    /**
     * Método que se ejecutara cuando se haga un click en retirar regalo.
     * @param e Evento generado cuando se de un click en un botón.
     */
    class retirarRegalo implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            int b=ninosConRegalo.getSelectedIndex();
            int a=0;
            int c=0;
            if(b==-1){
                JOptionPane.showMessageDialog(null, "No ha seleccionado ningun niño");
            }else{
                for(a=0;a<50;a++){
                    if(ninios[a].getconRegalo() && ninios[a].getNombre().equals(nConRegalo.elementAt(b)))
                        break;
                    }
                for(c=0;c<7;c++){
                    if((ninios[a].getRegaloDado())==(regalos[c].getCodigo())){
                        break;
                    }
                }
                usuario.retirarRegalo(ninios[a],regalos[c],usuario,b,nSinRegalo,nConRegalo);
                saldo.setText("Saldo Actual: $"+usuario.getSaldo());
            }
        }
    }
}